package main

func main() {
	//	  闭包
	// 闭包的本质一九是一个匿名函数，只是这个函数引入外界的变量/参数
	// 匿名函数 + 引用的变量/参数 = 闭包
	// 特点：
	//		返回的是一个匿名函数，但是这个匿名函数引用的函数外的变量/参数，因此这个匿名函数就和变量/参数形成一个整体，构成闭包。
	//		闭包中使用的变量/参数会一直保存在内存中，所以会一直使用，意味着闭包不可滥用

	f := getSum()
	f(1) // 结果是1
	f(2) // 结果是3
	f(3) // 结果是6
	f(4) // 结果是10
}

func getSum() func(int) int {

	var sum = 0

	return func(num int) int {
		sum = sum + num
		return sum
	}

}
